/*
 *  include/clinux/kernel.h
 *
 *  last modified at 2007.07.14 21:59 by ChenJie
 *
 */

#ifndef KERNEL_H
#define KERNEL_H

typedef struct desc_struct{
	unsigned long dw[2];
}DESCRIPTOR;

typedef unsigned long PAGETABLE[1024];

extern DESCRIPTOR idt[256];
extern DESCRIPTOR gdt[256];
extern PAGETABLE  pg_dir;
//extern union task_union init_task;

// 内核在内存中的范围：0 ~ &_end
// &_end有用, 而_end因为贮存区域已在内核之外, 所有没有意义
extern unsigned long   _end;

// 系统扩展物理内存(从1MB开始)大小(KB)：
#define EXT_MM_SIZE	(*((unsigned short *)0x90002))

// 加载的内核大小(B)
#define KERNEL_SIZE	((unsigned long)(&_end))

// 临时输出函数：
int print(const char *);
int printk(const char *,...);
int cprintk(char color, const char *, ...);
int xycprintk(int x, int y, char color, const char *, ...);

// 字符显示属性：
#define TEXT_BLINK	0x80
#define TEXT_BK_R	0x40
#define TEXT_BK_G	0x20
#define TEXT_BK_B	0x10
#define TEXT_FR_I	0x08
#define TEXT_FR_R	0x04
#define TEXT_FR_G	0x02
#define TEXT_FR_B	0x01


// 内核错误：
void panic(const char *);

#endif //KERNEL_H
